<?xml version="1.0" encoding="UTF-8"?>
<!--

       Copyright 2006-2018 the original author or authors.

       Licensed under the Apache License, Version 2.0 (the "License");
       you may not use this file except in compliance with the License.
       You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing, software
       distributed under the License is distributed on an "AS IS" BASIS,
       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       See the License for the specific language governing permissions and
       limitations under the License.

-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>What's New in MyBatis Generator</title>
  <link rel="stylesheet" type="text/css" href="mbgstyle.css" />
</head>
<body>
<h1>What's New in MyBatis Generator</h1>
<h2>Version 1.4.0</h2>
<p>This is a fairly major change with these themes:</p>
<ul>
  <li>Move to Java 8</li>
  <li>Remove support for iBatis2</li>
  <li>General code cleanup</li>
</ul>

<h3>Breaking API Changes</h3>
<ul>
  <li>Removed Plugin methods that were specific to iBatis2 (these were the <code>clientXXXGenerated</code>
      methods that accepted a <code>TopLevelClass</code> as a parameter).</li>
  <li>Changed the signature of the Plugin <code>clientGenerated</code> method.</li>
  <li>Removed the <code>toXmlElement</code> methods in the configuration classes. These methods were never properly
      implemented.</li>
  <li>In the Java DOM, the <code>Method</code> class now requires an explicit call to <code>setAbstract</code>
      to mark the method as an abstract method. This was done to support private methods in interfaces for Java9+
      code.</li>
  <li>In the Java DOM, removed the default constructors for <code>Method</code> and <code>Field</code></li>
  <li>Removed several methods from <code>CompilationUnit</code> including <code>isJavaInterface</code>,
      <code>isJavaEnumeration</code>, <code>getSuperClass</code>, and <code>getSuperInterfaceTypes</code>.</li>
  <li>Changed return types to Optionals in the DOM methods where appropriate.</li>
  <li>Removed the <code>getFormattedContent</code> method from all Java and XML DOM classes. These methods
      are replaced by a new set of renderer classes. Note that the new renderer classes will produce
      code that is the same as the prior methods with very few exceptions - and those exceptions are related to
      bugs in the old methods.</li>
</ul>

<h3>Other Changes</h3>
<ul>
  <li>Support for iBatis2 removed</li>
  <li>Support for parsing old Ibator configuration files removed</li>
  <li>Removed SqlMapConfigPlugin as that was specific to iBatis2</li>
  <li>Added ability to specify a different project and package for generated model objects</li>
  <li>Expanded the capabilities of the Java DOM and fixed a few inconsistencies</li>
</ul>

<h2>Version 1.3.7</h2>
<p>This version contains several minor fixes and enhancements - mostly related to the MyBatis3DynamicSql runtime.</p>

<p>Please reference the GitHub page for milestone 1.3.7 for details. 
<a target="_blank" href="https://github.com/mybatis/generator/issues?q=milestone%3A1.3.7">Milestone 1.3.7</a>
</p>

<h2>Version 1.3.6</h2>
<h2>Major Enhancement</h2>
<p>The major enhancement in this release is a new type of generated code.  The generator will now create code that
is based on the <a href="http://www.mybatis.org/mybatis-dynamic-sql/docs/introduction.html">MyBatis Dynamic SQL</a> library.
From the first release of MyBatis Generator, the generator has created code that includes "by example" support, but that support
has been limited and difficult to use.  The new style of generated code supports a more natural SQL-like syntax for WHERE clauses.
Additionally, WHERE clauses can be created with any combination of ANDs and ORs.  This is a significant improvement to the generated
code.  It comes at the cost of dependency on MyBatis Dynamic SQL, and loss of compatibility with previously generated code, but we
think it will be worth the change.  One other benefit is that the generated code is significantly smaller and easier to understand.  
</p>
<p>Don't worry - unless you enable this change, then generator will create code exactly as it has in the past.</p>
<p>To enable the change, use the new "MyBatis3DynamicSQL" runtime on the
 <a href="configreference/context.html">&lt;context&gt;</a> configuration element.  To read more about using this new
 style of generated code, see the
  <a href="generatedobjects/dynamicSql.html">MyBatis Dynamic SQL Usage Notes</a> page.</p>

<h2>Other Announcements</h2>
<ul>
  <li>After this release, support for iBatis2 code generation will be removed</li>
  <li>After this release, the generator will require Java 8 to run.  It will still generate code for earlier
    Java versions, but the generator itself will require Java 8.</li>
</ul>

<h3>Other Fixes/Enhancements</h3>
<p>Please reference the GitHub page for milestone 1.3.6 for details on what else
has changed in this release. 
<a target="_blank" href="https://github.com/mybatis/generator/issues?q=milestone%3A1.3.6+is%3Aclosed">Milestone 1.3.6</a>
</p>

<h2>Version 1.3.5</h2>
<h3>Fixes/Enhancements</h3>
<p>Please reference the GitHub page for milestone 1.3.5 for details on what
has changed in this release. 
<a target="_blank" href="https://github.com/mybatis/generator/issues?q=milestone%3A1.3.5+is%3Aclosed">Milestone 1.3.5</a>
</p>

<h2>Version 1.3.4</h2>
<h3>Announcements</h3>
<p>In this release we have deprecated the popup menu item in the eclipse plugin for
running MyBatis generator and it will be removed in the next release.  The replacement
is a new MyBatis generator launcher that has far more capabilities than the popup
menu item.</p>

<h3>Fixes/Enhancements</h3>
<p>Please reference the GitHub page for milestone 1.3.4 for details on what
has changed in this release. 
<a target="_blank" href="https://github.com/mybatis/generator/issues?q=milestone%3A1.3.4+is%3Aclosed">Milestone 1.3.4</a>
</p>

<h2>Version 1.3.3</h2>
<h3>Announcements</h3>
<ul>
  <li>MyBatis Generator now requires JRE 1.6 or greater</li>
</ul>
<h3>Fixes/Enhancements</h3>
<p>Please reference the GitHub page for milestone 1.3.3 for details on what
has changed in this release. 
<a target="_blank" href="https://github.com/mybatis/generator/issues?q=milestone%3A1.3.3+is%3Aclosed">Milestone 1.3.3</a>
</p>

<h2>Version 1.3.2</h2>
<h3>Bugs Fixed</h3>
<ul>
  <li>Add comments to generated constructors in the model classes
      so they can be merged.</li>
  <li>Support package names with Uppercase elements.</li>
  <li>Fixed issue #288 - Incorrect annotated countByExample method</li>
  <li>Fixed the Maven plugin so &lt;properties&gt; files can be found
      in the project classpath.</li>
  <li>Fixed issue #359 - make JdbcTypeInformation public</li>
  <li>Fixed Context.toXmlElement() method to include missing attributes</li>
  <li>Fixed CaseInsensitiveLikePlugin to add new methods to GeneratedCriteria inner class</li>
  <li>Issue #412 - update the documentation to reflect the difference in MyBatis3 regarding
      generated keys.</li>
  <li>Issue #440 - incorrect code generated for primitives with type handlers</li>
  <li>Issue #439 - use auto boxing for primitives when appropriate</li>
  <li>Issue #438 - keep primary key properties in database sequence</li>
  <li>Issue #507 - RowBounds plugin generates duplicate statements</li>
  <li>Issue #593 - CaseInsensitiveLikePlugin skipped Jdbc4 National Character Types</li>
</ul>
<h3>Enhancements</h3>
<ul>
  <li>Added a new target runtime - MyBatis3Simple - that can be used to generate
      very simple CRUD operations on tables.  This runtime produces far simpler
      MyBatis code than the normal MyBatis3 runtime.  The produced code also has
      lower functionality that the normal MyBatis3 runtime.  If you do not
      regularly use the "by example" methods, then the code produced by the
      MyBatis3Siple runtime may be more suitable to your project.</li>
  <li>Added a new plugin - VirtualPrimaryKey plugin - that can be used to specify
      columns that act as a primary key, even if they are not defined as
      primary keys in the database.</li>
  <li>Issue #328 - Added a new plugin - RowBounds plugin - that will generate an additional
      version of <code>selectByExample</code> that supports the MyBatis RowBounds
      function.</li>
  <li>Created a new reference page for supplied plugins:
      <a href="reference/plugins.html">Supplied Plugins</a></li>
  <li>Issue #368 - Allowed for generation of Java Model only.  If no SQLMapGenerator
      or JavaClientGenerator is specified in a context, then only a Java Model is generated.
      Also, if property "modelOnly" is set to "true" on a &lt;table&gt; element, then
      only model object and, possibly XML result maps, will be generated.
  </li>
  <li>Issue #374 - Allow for specification of a file encoding for reading/writing
      Java files on the file system. There is a new property "javaFileEncoding" on the
      &lt;context&gt; element that can be used to specify a Java file encoding. (XML files
      are always read/written in UTF-8 per the spec).
  </li>
  <li>Added the ability to specify custom code formatters for generated Java and XML files.
      See new properties on the &lt;context&gt; element for more information.
  </li>
  <li>Added support for varargs to <code>org.mybatis.generator.api.dom.java.Parameter</code>
      class
  </li>
  <li>Added support for <code>synchronized</code> and <code>native</code> to
      <code>org.mybatis.generator.api.dom.java.Method</code> class
  </li>
  <li>Added support for <code>transient</code> and <code>volatile</code> to
      <code>org.mybatis.generator.api.dom.java.Field</code> class
  </li>
  <li>Issue #375 - Added a new plugin - ToStringPlugin - that will generate a toString() method
      in the model classes.  Thanks Alexei and Iwao!</li>
  <li>Issue #233 - added GWT capability to the Serializable plugin</li>
  <li>Issue #564 - support subpackages at the table level</li>
  <li>Issue #590 - new plugin for &lt;cache&gt;.  Thanks Jason Bennett! </li>
</ul>

<h2>Version 1.3.1</h2>
<h3>Bugs Fixed</h3>
<ul>
  <li>Always specify &lt;selectKey&gt; order for MyBatis3 - position within
      the &lt;insert&gt; is not relevant.</li>
  <li>"rootInterface" was ignored for XMLMAPPER clients</li>
  <li>Fixed bug when a lower case class name is specified as a domain object name</li>
  <li>Fixed issue #174 - incorrect format of order by clause in
      selectByExampleWithBlobs</li>
</ul>
<h3>Enhancements</h3>
<ul>
  <li>Added a new MyBatis3 generator that generates code based solely on annotations
      with no generated XML.  Configuration settings for this new generator are as follows:
    <ul>
      <li>The <code>targetRuntime</code> attribute of
          <a href="configreference/context.html">&lt;context&gt;</a>
          element is <b>MyBatis3</b></li>
      <li>The <code>type</code> attribute of
          <a href="configreference/javaClientGenerator.html">&lt;javaClientGenerator&gt;</a>
          element is <b>ANNOTATEDMAPPER</b></li>
    </ul>
  </li>
  <li>Added a new MyBatis3 generator that generates code based on a mix of annotations
      and generated XML.  Configuration settings for this new generator are as follows:
    <ul>
      <li>The <code>targetRuntime</code> attribute of
          <a href="configreference/context.html">&lt;context&gt;</a>
          element is <b>MyBatis3</b></li>
      <li>The <code>type</code> attribute of
          <a href="configreference/javaClientGenerator.html">&lt;javaClientGenerator&gt;</a>
          element is <b>MIXEDMAPPER</b></li>
    </ul>
  </li>
  <li>Add support for JDBC types NCHAR, NCLOB, NVARCHAR to match MyBatis3.</li>
  <li>Added support for "useGeneratedKeys" in MyBatis3.  See
      <a href="configreference/generatedKey.html">&lt;generatedKey&gt;</a>
      for details.
  </li>
  <li>Added support for immutable objects and constructor based result maps in
      MyBatis3.  See <a href="configreference/table.html">&lt;table&gt;</a>
      and/or <a href="configreference/javaModelGenerator.html">&lt;javaModelGenerator&gt;</a>
      for details.
  </li>
  <li>Added support for initialization blocks in the Java DOM</li>
  <li>Issue #214 - Added the ability to supress all comments in generated code.  See
      <a href="configreference/commentGenerator.html">&lt;commentGenerator&gt;</a>
      for details.
  </li>
</ul>


<h2>Version 1.3.0</h2>
<ol>
  <li>Moved to mybatis.org, renamed MyBatis Generator</li>
  <li>MyBatis generator will continue to support XML configuration files
      from Ibator.  However, any new features will only be implemented in
      MyBatis formatted configuration files.  Some minimal changes are required to
      migrate Ibator formatted configuration files to the new DTD for MyBatis Generator.</li>
  <li>Configuration settings for MyBatis 3 are as follows:
    <ol type="a">
      <li>The <code>targetRuntime</code> attribute of
          <a href="configreference/context.html">&lt;context&gt;</a>
          element must be changed to <b>MyBatis3</b></li>
      <li>The <code>type</code> attribute of
          <a href="configreference/javaClientGenerator.html">&lt;javaClientGenerator&gt;</a>
          element must be changed to <b>XMLMAPPER</b></li>
    </ol>
  </li>
  <li>Removed support for <code>suppressTypeWarnings</code> property in the
     <code>&lt;context&gt;</code> element.  This confusing property has become
     unmanagable due to confusion between @SuppressWarnings("unchecked") and
     @SuppressWarnings("rawtypes") in the different compilers.  This was only used
     in the corner case where code generated with Ibatis2Java2 targetRuntime was to be compiled
     with a JSE 5.0 compiler.</li>
</ol>

<h2>Version 1.2.2 (Never Released)</h2>
<h3>Announcements</h3>
<ul>
  <li>The <code>org.apache.ibatis.ibator.api.CommentGenerator</code> interface
      has changed.  Classes that implement this interface <b>must be changed</b>.  With
      this change, implementing classes have access to many more data elements
      from which to generate comments.  Additionally, this change makes the comment
      generator interface more consistent with the other public Ibator interfaces.
      Details of the change follow:
      <ul>
        <li>Methods which accepted the parameter <code>FullyQualifiedTable</code>
            now accept the parameter <code>IntrospectedTable</code> instead.
            The <code>FullyQualifiedTable</code> instance is available through
            the method <code>IntrospectedTable.getFullyQualifiedTable()</code>.
        </li>
        <li>Methods which accepted the <code>String</code> parameter <code>columnName</code>
            now accept the parameter <code>IntrospectedColumn</code> instead.
            The column name is available through
            the method <code>IntrospectedColumn.getActualColumnName()</code>.
        </li>
      </ul>
      <p><b>Important Note:</b> any implementation that subclasses the Ibator
      supplied class <code>DefaultCommentGenerator</code> does not need to
      change immediately with this release.
      The old methods have been deprecated and will be removed with the next
      release of Ibator - so subclasses should be reworked as soon as
      convenient.</p>
  </li>
  <li>The SQL Map generator has changed in that it no longer prepends the string
      "ibatorgenerated_" to every generated XML id.  If you were relying on these
      generated names in other code, you can force Ibator to prepend the string
      with the property <code>useLegacyXMLIds</code> on the
      <a href="configreference/sqlMapGenerator.html">&lt;SqlMapGenerator&gt;</a> configuration.</li>
  <li>Ibator is now built with Maven and includes a Maven plugin</li>

</ul>
<h3>Bugs Fixed</h3>
<ul>
  <li>NPE when no DAOs are generated.</li>
  <li>IBATIS-579 - Don't allow column names that contain spaces to
      break across lines in generated XML.</li>
  <li>Fixed NPE and incorrect calculation in generated equals method
      (from EqualsHashCodePlugin) when certain
      fields are null - thanks to Benjamin Klatt for finding this bug.</li>
  <li>IBATIS-601 - improper validation of &lt;generatedKey&gt;</li>
  <li>IBATIS-609 - incorrect parsing of Java generic types</li>
  <li>Fixed spelling error LONCVARCHAR to LONGVARCHAR (thanks Allard)</li>
  <li>Fixed IBATIS-731 - change name of primary key variable to avoid conflicts</li>
  <li>Fixed IBATIS-699 - Overwrite unmergeable XML files if enabled</li>
  <li>Fixed issue where insertSelective failed if there is a sequence generating the
      primary key (issue only with iBATIS3)</li>
</ul>

<h3>Enhancements</h3>
<ul>
  <li>IBATIS-569 - Modified the IbatorRules implementation to make it easier
      for plugins to provide custom implementations of IbatorRules.  See the
      Javadoc for the new class
      <code>org.apache.ibatis.ibator.internal.rules.IbatorRulesDelegate</code>
      for more information.</li>
  <li>IBATIS-571 - Added support for automatically delimiting SQL keywords
      if they are used as column names in tables.  See the
      <a href="configreference/ibatorContext.html">&lt;ibatorContext&gt;</a> page
      for more information.</li>
  <li>IBATIS-577 - Define SQL fragments for column lists to improve
      reusability of generated code.  Thanks to Iwao AVE! for the idea
      and the initial patch.
  </li>
  <li>Added new <code>-verbose</code> command line argument.  See the
     <a href="running.html">Running Ibator</a> page
      for more information.</li>
  <li>Added logging statements for use in debug. See the
     <a href="reference/logging.html">Logging</a> page
      for more information.</li>
  <li>Added new example plugin to demonstrate adding case insensitive LIKE
      support to generated Example classes.  See the
     <a href="configreference/ibatorPlugin.html">&lt;ibatorPlugin&gt;</a> page
      for more information.</li>
  <li>Added "delimitAllColumns" attribute to table configurations.  This supports databases
      like PosgreSQL that are case sensitive for identifiers. See the
     <a href="configreference/table.html">&lt;table&gt;</a> page
      for more information.</li>
  <li>Added a page explaining how to deal with case sensitivity in PostgreSQL.  See the
     <a href="usage/postgresql.html">PostgreSQL</a> page
      for more information.</li>
  <li>IBATIS-586 - Added the ability to specify nested property elements on columnOverrides.
      See the <a href="configreference/columnOverride.html">&lt;columnOverride&gt;</a> page
      for more information. Thanks to Dan Turkenkopf for the idea and a nice initial patch.</li>
  <li>The IntrospectedColumn class now contains any column remarks returned during
      database introspection. This may be useful for some CommentGenerators.</li>
  <li>IBATIS-592 - Added attributes to IntrospectedTable that contain the calculated
      SqlMap namespace, and the calculated runtime table names.  These can now be overridden in
      plugins.</li>
  <li>Fixed addCriterionfor JDBC* methods so that they all do a null check.</li>
  <li>Fixed IbatorRunner so that configuration errors are shown (thanks to Karel Rank)</li>
  <li>IBATIS-605 - Added Informix Dialect for
      <a href="configreference/generatedKey.html">&lt;generatedKey&gt;</a></li>
  <li>Addedd support for "distinct" on select by example methods</li>
  <li>Added new "or" method to example classes</li>
  <li>Added new "useCompoundPropertyNames" property on &lt;table&gt;</li>
  <li>Enabled a far simpler method for extending the example classes</li>
  <li>EqualsHashCodePlugin now generates far superior methods</li>

</ul>

<h2>Version 1.2.1</h2>
<h3>Bugs Fixed</h3>
<ul>
  <li>Fixed the IbatorObjectFactory so it will find internal classes from the context classloader.</li>
  <li>Fixed IBATIS-565 - ill formed comment in the SqlMapConfigPlugin</li>
</ul>

<h3>Enhancements</h3>
<ul>
  <li>Modified plugin methods for model fields, getters, and setters so that
   the plugin will know which type of class (Primary Key, Base Record, or
   Record with BLOBs) is being generated.</li>
  <li>Added methods to IntrospectedTable to get/set attributes.  This
      allows plugin classes to maintain table based state between
      plugin calls.</li>
  <li>Added <code>initialized</code> method to the plugin API.  This
      allows plugins to alter some of the fundamental code generation items
      (like the name of a generated class, for example).</li>
  <li>Added an example plugin to show usage of the <code>initialized</code>
      method.</li>
</ul>

<h2>Version 1.2.0</h2>
<h3>Announcements</h3>
<ul>
  <li>With version 1.2, Abator is renamed to Apache iBATIS Ibator.  Several changes
      have been made to the XML configuration as well as the Java API.  See the
      <a href="migratingFromAbator.html">Migrating from Abator</a> page for detailed
      information about changes needed to existing Abator configuration files.</li>
</ul>

<h3>Bugs Fixed</h3>
<ul>
  <li>Fixed the JavaTypeResolver so that columns with unsupported data types
      may be overridden by configuration.</li>
  <li>Fixed IBATIS-523 - a bug in the pre-release version of the EqualsHashCodePlugin</li>
  <li>Fixed IBATIS-542 - upgrade the build to Ant version 1.7.1</li>
</ul>

<h3>Enhancements</h3>
<ul>
  <li>Ibator now includes a plugin mechanism.  This mechanism can be used to
      add to or modify the code generated by Ibator.  If you have previously
      extended one of Abator's code generators to change their behavior, we
      strongly suggest that you move to a plugin.  See the
      <a href="configreference/ibatorPlugin.html">&lt;ibatorPlugin&gt;</a> page
      for detailed information.</li>
  <li>Ibator ships with the following plugins:
    <ul>
      <li>A plugin that will generate an SQL Map Config File
        (<code>org.apache.ibatis.ibator.plugins.SqlMapConfigPlugin</code>)
      </li>
      <li>A plugin that will make generated model classes Serializable
        (<code>org.apache.ibatis.ibator.plugins.SerializablePlugin</code>)
      </li>
      <li>A plugin that will add <code>equals</code> and <code>hashCode</code>
        methods to generated model classes
        (<code>org.apache.ibatis.ibator.plugins.EqualsHashCodePlugin</code>)
      </li>
    </ul>
  </li>
  <li>Added support for "runtimeCatalog" and "runtimeSchema" properties to the
      <a href="configreference/table.html">&lt;table&gt;</a>
      configuration element.  Thanks to Dan Turkenkopf for the idea and the
      patch!</li>
  <li>New generated method - insertSelective.  This method will allow you to use
      column defaults on a table definition on insert</li>
  <li>Added the ability to specify a that DAO implementation classes be in a
      separate package from the DAO interface classes.</li>
</ul>

<h3>Changes from Abator</h3>
<p>There are several breaking changes between Ibator and Abator.  This list
details the changes, and has methods of resolving the differences.</p>
<ul>
  <li>JSE 5.0 or higher is required for Ibator</li>
  <li>Ibator does not contain the "legacy" code generators from Abator.  You must
      choose "Ibatis2Java2" or "Ibatis2Java5" as a target runtime - and code generated from
      Ibator is compatible with iBATIS version 2.2.0 or higher only.  If you are
      using an earlier version of iBATIS - upgrade!  If you are not able to upgrade,
      then you must continue to use Abator.</li>
  <li>The classloading strategy in Ibator is changed from Abator.  In all cases, we now recommend
      specifying the classpath external to Ibator and we further recommend that you do not use
      the <code>&lt;classPathEntry&gt;</code> element.  You may specify classpath entries
      if you feel you must, but those entries will only be used when loading JDBC drivers
      of Java model root classes.  If you write a custom extension to Ibator, or a plugin,
      you must specify that classpath entry external to Ibator.</li>
  <li>The API for extending Ibator is significantly changed from Abator.
      In most cases, implementations of the old Abator interfaces should
      be converted to Ibator plugins.  See the
      <a href="reference/extending.html">Extending Ibator</a> for more information.</li>
  <li>The <code>afterXXXGenerationHook</code> methods have been removed from
      all Ibator supplied implementations of the core interfaces.  If you
      were extending an Ibator supplied implementation to make use of these methods,
      then you <em>must</em> migrate your code to an Ibator plugin.</li>
  <li>The build has been significantly modified and now includes an Emma based
      code coverage report.</li>
  <li>Changes to the XML configuration file are required.  See the
      <a href="migratingFromAbator.html">Migrating from Abator</a> page for detailed
      information</li>
</ul>

<h2>Version 1.1.0</h2>
<h3>Announcements</h3>
<ul>
  <li>The next release of Abator will require JRE 5.0 or higher.</li>
  <li>Java2 is now the default generator set.  This will cause different code to be
      generated if you have not specified a generator set previously.  To remedy this,
      set the generator set to "Legacy".</li>
</ul>

<h3>New Generated Methods</h3>
<p>Abator will generate these new methods:</p>
<dl>
  <dt><b>countByExample</b></dt>
  <dd>This method will return an integer representing the number of rows in a table
      that match the given criteria.</dd>
  <dt><b>updateByExample</b></dt>
  <dd>This method will update all rows in a table that match a given criteria.  This method is
      available in the Java2 and Java5 generator sets only.  There is also a "selective" version
      of the method that only updates certain columns of a table (the selective version of this
      method is probably the more useful version to use in most situations).</dd>
</dl>

<h3>Bugs Fixed</h3>
<ul>
  <li>Fixed bug for corner case where a criteria class is created, but no criteria
      are set.</li>
  <li>Fixed a bug that caused the JavaModelGenerator's "trimStrings" property to fail</li>
  <li>Fixed the XML file merger so that internal entities are preserved</li>
  <li>Fixed the XML configuration parser so that external entities are handled properly</li>
  <li>Fixed bug - incorrect datatype mapping for JDBC BIT datatype</li>
  <li>Fixed bug where Abator generated incorrect properties for certain database columns
      (for example, if the column name is I_NAME)</li>
</ul>

<h3>Miscellaneous Changes</h3>
<ul>
  <li>Added the ability to specify properties to ignore qualifiers and change runtime
      table names in the generated SQL for a table.  Primary use cases for this
      support include:
      <ul>
        <li>Generating objects for a table that has a public synonym or alias</li>
        <li>Generating objects for a table that exists in many schemas, and the
            schema will be selected at runtime</li>
      </ul>
    See the <a href="configreference/table.html">&lt;table&gt;</a>
    reference page for more information, or the
    <a href="usage/oracle.html">Oracle</a> reference page for an example.</li>
  <li>Added support for delimiting SQL identifiers for the use cases where identifiers
      contain spaces or SQL reserved words.
      See the <a href="configreference/table.html">&lt;table&gt;</a>,
      <a href="configreference/abatorContext.html">&lt;abatorContext&gt;</a>,
      and <a href="configreference/columnOverride.html">&lt;columnOverride&gt;</a>
      reference pages for more information.</li>
  <li>Added SYBASE dialect for generated keys.
      See the <a href="configreference/generatedKey.html">&lt;generatedKey&gt;</a>
      reference page for more information.</li>
  <li>Added DB2_MF (DB2 on Main Frames) dialect for generated keys.
      See the <a href="configreference/generatedKey.html">&lt;generatedKey&gt;</a>
      reference page for more information.</li>
  <li>Abator will now automatically escape identifiers that contain the $ or # characters
      as these characters have special meaning in iBATIS configuration files.</li>
  <li>Added a <code>clear</code> method to the generated example classes (in the Java2 and Java5
      generator sets only).  This allows reuse of these classes.</li>
  <li>Added the ability to specify that result maps should use column indexes rather
      than column names in the result mappings.  Primary use cases for this
      support include:
      <ul>
        <li>When tables have columns whose name is only differentiated by
            case (e.g. "first name" and "First Name")</li>
        <li>When you want to make the selects as fast as possible (there is a slight
            performance benefit when using column indexes)</li>
      </ul>
    See the <a href="configreference/table.html">&lt;table&gt;</a>
    reference page for more information.</li>
  <li>Made the generated Example and Criteria classes extendable.  Added some documentation
      about how to extend these classes.  See the
      <a href="generatedobjects/extendingExampleClass.html">Extending the Example Classes</a>
      reference page for more information.</li>
  <li>Made the legacy DAOs extendable.</li>
  <li>Added the ability to provide a renaming rule for columns.  This is for the
      use case where columns have a common prefix that should be removed before
      calculating the property name.  See the
      <a href="configreference/columnRenamingRule.html">&lt;columnRenamingRule&gt;</a>
      reference page for more information.</li>
  <li>Added support for persisting a configuration to XML - this to enable
      a graphical editor in the future.</li>
  <li>Add afterXXXGenerationHook() methods in all generators to enable adding
      extra Java code or XML elements to any generated object.  This will make
      it easier to create customized generators.</li>
  <li>API change to allow generating with selected contexts rather than
      the entire config file.</li>
  <li>API change to allow generating with selected tables rather than
    the entire config file.</li>
  <li>Exposed new support for selecting tables and/or contexts to the
      command line and the Ant task - this has added an advanced syntax to the command
      line for Abator.  See the
      <a href="running.html">Running Abator</a> reference page for more information.</li>
  <li><code>rootClass</code> and <code>rootInterface</code> may now be specified for each table.
      See the <a href="configreference/table.html">&lt;table&gt;</a>
      reference page for more information.</li>
  <li>If a <code>rootClass</code> is specified for any table, Abator will now check in the
      rootClass to see if a generated property already exists in the root class.  If it does,
      Abator will not generate the property.  The &lt;javaModelGenerator&gt; element now
      accepts a property to specify the classpath of the <code>rootClass</code>.  See the
      <a href="configreference/javaModelGenerator.html">&lt;javaModelGenerator&gt;</a>
      reference page for more information.  Thanks to Ashok Madhavan for the beginnings
      of this code.</li>
  <li>Allowed specifying a type (pre or post) for the generated key element.  See the
      <a href="configreference/generatedKey.html">&lt;generatedKey&gt;</a>
      reference page for more information.</li>
  <li>Added a comment generator interface to enable generation of custom comments.
      See the <a href="configreference/commentGenerator.html">&lt;commentGenerator&gt;</a>
      reference page for more information.</li>
</ul>

<h2>Version 1.0.0</h2>
<h3>Generator Sets</h3>
<p>A generator set is a set of
code generators (SQL Map Generator, Java Model Generator, DAO Generator, and Java Type Resolver).
Abator now ships three different generator sets.  The generated code from these three
generator sets is slightly different, and the use of the generated objects is slightly
different too.  The concepts are exactly the same.  With the newer generator sets, the
"by example" methods have been vastly improved.  It is now possible to generate
<b>virtually any</b> WHERE clause (including IN and BETWEEN predicates).  Lastly, the new
generator sets generate much more concise code - the DAOs and SQL Maps are of
normal size, and there are no extraneous methods.  The example class in the new generator
sets encapsulates all the function needed to generate dynamic queries.</p>
<p>The three generator sets shipped with Abator are as follows:</p>
<dl>
  <dt>Legacy</dt>
  <dd>This generator set generates code that is the same as previous versions of
      Abator.  There are some limitations with this generator set and we strongly
      recommend that you choose one of the other sets.  However, this set remains
      the default for now.  <b>This generator set will likely be removed in a future
      version of Abator.</b></dd>
  <dt>Java2</dt>
  <dd>This generator set generates code that is compatible with iBATIS versions 2.2.0 and
      higher.  With this generator set the "by example" methods are much more powerful
      than in the legacy set.  It is now possible to generate
      virtually unlimited SQL WHERE clauses with Abator generated code (including "IN"
      and "BETWEEN" clauses).  <b>This generator set will likely become the default set in a
      future version of Abator.</b></dd>
  <dt>Java5</dt>
  <dd>This generator set has the same capabilities as the Java2 generator set with the
      added feature of generating code that is JSE 5.0 compliant using parameterized
      types and annotations.</dd>
</dl>
<p><b>Important:</b> code generated with the Java2 or Java5 generator sets is not 100%
compatible with code generated with the Legacy set - especially in the use of the
"by example" methods.  Also note that the "by example" methods in these generator sets rely
on iBATIS dynamic SQL support that is missing in iBATIS versions prior to version 2.2.0.</p>
<p>A generator set is selected with the <code>generatorSet</code> attribute of the
<code>&lt;abatorContext&gt;</code> element.  See the
<a href="configreference/abatorContext.html">&lt;abatorContext&gt;</a> reference page for
more information.</p>

<p>Use of the example classes is different with the different generator sets.  See the
<a href="generatedobjects/exampleClassUsage.html">Example Class Usage</a> page for more
information.</p>

<h3>Model Types</h3>
<p>A model type is used to give you more control over the types of domain objects
generated by Abator.  Abator now supports three different types of domain models
as follows:</p>
<dl>
  <dt>conditional</dt>
  <dd>This model is similar to the hierarchical model except that a separate
    class will not be generated if that separate class would only contain
    one field.  So if a table has only one primary key field, that field
    will be merged into the base record class.  This model type is the default.
    <b>Note that this model type may generate classes that are not 100%
    with classes generated in previous versions of Abator.</b></dd>
  <dt>flat</dt>
  <dd>This model generates only one domain class for any table.  The class
     will hold all fields in the table.</dd>
  <dt>hierarchical</dt>
  <dd>This model is the same as the model shipped with the initial versions
      of Abator.  This model will generate a primary key class if the table has
      a primary key, another class that holds any BLOB columns in the table, and
      another class that holds the remaining fields.  There is an appropriate
      inheritance relationship between the classes.</dd>
</dl>

<p>Model types can be specified as a default for an entire context, and you may
override the default for each table in a context.  See the
<a href="configreference/abatorContext.html">&lt;abatorContext&gt;</a> reference page for
more information about setting the context default..
See the <a href="configreference/table.html">&lt;table&gt;</a>
reference page for more information about setting a model type for specific tables.
</p>
<p><b>Important:</b> the default value is conditional - this is a non-backward compatible
change from previous versions of Abator.</p>

<h3>updateByPrimaryKeySelective</h3>
<p>This is a new mapped SQL statement, and new DAO method, that will only
update columns whose corresponding properties in the parameter class are non-null.
This can be used to update certain
columns in a record without needing to update the entire record.
</p>
<p><b>Important:</b> any column that is mapped to a primitive type
will always be updated.</p>

<h3>Miscellaneous Changes</h3>
<ul>
  <li>Added the ability to specify a table alias.  This aids in reuse of generated
    SQL map elements.  See the <a href="configreference/table.html">&lt;table&gt;</a>
    reference page for more information.</li>
  <li>Fixed the XML file merger so that extraneous blank lines at the end of the
      file are removed.</li>
  <li>Added the ability to specify a type handler for table columns.
    See the <a href="configreference/columnOverride.html">&lt;columnOverride&gt;</a>
    reference page for more information.</li>
  <li>Added the ability to specify the visibility of the DAO "by example" methods.
    This allows you to make the methods private for internal use only.
    See the <a href="configreference/javaClientGenerator.html">&lt;javaClientGenerator&gt;</a>
    reference page for more information.</li>
  <li>Added the ability to override the naming convention for DAO method names.
    See the <a href="configreference/javaClientGenerator.html">&lt;javaClientGenerator&gt;</a>
    reference page for more information.</li>
  <li>Added the ability to specify wildcards for schema or tableName in a table
      configuration.  This will allow generation of many tables with a simple
      XML configuration.
    See the <a href="configreference/table.html">&lt;table&gt;</a>
    reference page for more information.</li>
  <li>Added the ability to escape wildcard characters in schema or table names
      if required by the driver.  See the <a href="configreference/table.html">&lt;table&gt;</a>
      reference page for more information.</li>
  <li>Added the ability to suppress JSE 5.0 type warning messages for non-parameterized
      types if you are using the Legacy or Java2 generator sets in a JSE 5.0 environment.
    See the <a href="configreference/abatorContext.html">&lt;abatorContext&gt;</a>
    reference page for more information.
  </li>
  <li>Added the ability to specify an external properties file for passing
    parameters into an Abator configuration file (like the iBATIS properties
    file).  See the <a href="configreference/properties.html">&lt;properties&gt;</a>
    reference page for more information.
  </li>
  <li>The Ant task now supports a "verbose" attribute.  See the
    <a href="running.html">Running Abator</a> page for more information.
  </li>
  <li>The Ant task now supports a nested property set for passing values into
      an Abator configuration file.  See the
     <a href="running.html">Running Abator</a> page for more information.
  </li>
</ul>
</body>
</html>